//时间复杂度O(N)

void findnum(int a[][3], int  num)
{
	int i = 0;
	int j = 3;
	while (i<=2 && j>=0 )//循环的限制条件
	{
		if (a[i][j - 1] < num)//从右上角开始查找 
		{
			i++;//第一行最大比num小，跳到下一行
		}
		else  if (a[i][j - 1] > num)
		{
			j--;//第一行最大比num大，行不动，列左移 
		}
		else
		{
			printf("下标是 %d %d\n", i, j-1);
			return;
		}
	}	
	printf("没有找到数字\n");
}

int main()
{
	int a[][3] = { {1,2,3},
				   {4,5,6},
				   {7,8,9} };
	int num = 8;//要寻找的饿数字
	findnum(a, num);
	return  0;
}

////时间复杂度O(N^2)
//void findnum(int a[][3], int  num, int hang, int lie)
//{
//	int i = 0;
//	int j = 3;
//	for (int i = 0; i < hang; i++)//遍历数组
//	{
//		for (int j = 0; j < lie; j++)
//		{
//			if (a[i][j] == num)
//			{
//				printf("下标是 %d %d\n", i, j);
//				return;
//			}
//		}
//	}	
//	printf("没有找到数字\n");
//}
//
//int main()
//{
//	int a[][3] = { {1,2,3},
//				   {4,5,6},
//				   {7,8,9} };
//	int num = 8;//要寻找的饿数字
//	int hang = sizeof(a) / sizeof(a[0]);//数组行数
//	int lie = sizeof(a[0]) / sizeof(a[0][0]);//数组列数
//	findnum(a, num, hang, lie);
//	return  0;
//}

////返回型参数
//void find_k(int arr[3][3], int k, int *px, int* py)
//{
//	int x = 0;
//	int y = *px - 1;
//	int flag = 0;
//	while (x < *py && y >= 0)
//	{
//		if (arr[x][y] < k)
//		{
//			x++;
//		}
//		else if (arr[x][y] > k)
//		{
//			y--;
//		}
//		else
//		{
//			*px = x;
//			*py = y;
//			return;
//		}
//	}
//	//找不到
//	*px = -1;
//	*py = -1;
//}
//
////高内聚，低耦合
//
//int main()
//{
//	int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
//	int k = 12;
//	int x = 3;
//	int y = 3;
//
//	find_k(arr, k, &x, &y);
//	if (x == -1 && y == -1)
//	{
//		printf("找不到\n");
//	}
//	else
//	{
//		printf("找到了，下标是:%d %d\n", x, y);
//	}
//	return 0;
//}